package com.wmjsoft.proxyDemo

import java.lang.reflect.InvocationHandler
import java.lang.reflect.Method




class InvocationHandlerImpl : InvocationHandler {

    var userService: Any? = null

    constructor(service: Any) {
        this.userService  = service
    }


    override fun invoke(proxy: Any?, method: Method?, args: Array<Any>): Any? {
        //在代理真实对象前我们可以添加一些自己的操作
        //在代理真实对象前我们可以添加一些自己的操作
        println("在调用之前，我要干点啥呢？")

        println("Method+$method")

        //当代理对象调用真实对象的方法时，其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用

        //当代理对象调用真实对象的方法时，其会自动的跳转到代理对象关联的handler对象的invoke方法来进行调用
        val returnValue = method!!.invoke(userService, *args)

        //在代理真实对象后我们也可以添加一些自己的操作

        //在代理真实对象后我们也可以添加一些自己的操作
        println("在调用之后，我要干点啥呢？")

        return returnValue
    }
}